package com.example;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.*;

public interface JnaTest extends Library{
    JnaTest INSTANCE = Native.load("main",JnaTest.class);
    int add(int x,int y);
    void testString(String x);
    void testString(byte[] x);

    //声明底层有一个名为test_callback的函数 他的参数是一个回调函数
    int test_callback(addCallback f);
    int test_callback(multiplyCallback f);


    //声明底层有void *类型
    int test_voidp(Pointer p);
    
    //实现接口的目的是 将Java的方法通过JNA转换为C的函数指针
    //声明回调函数
    public interface myCallback extends Callback{
        //这个接口里只能有一个public 方法
        public int callback(int x,int y);
    }

    //实现回调函数 加法
    public static class addCallback implements myCallback{
        @Override
        public int callback(int x,int y){
            return x + y;
        }
    }
    //实现回调函数 乘法
    public static class multiplyCallback implements myCallback{
        @Override
        public int callback(int x,int y){
            return x * y;
        }
    }


}
